/**
 * 连续子数组最大和(ACM版本)
 *
 * 描述
 * 给定一个长度为
 * n 的数组，数组中的数为整数。
 * 请你选择一个非空连续子数组，使该子数组所有数之和尽可能大。求这个最大值。
 *
 * 输入描述：
 * 第一行为一个正整数n ，代表数组的长度。1≤n≤2⋅10^5
 *
 * 第二行为
 * n 个整数 ai，用空格隔开，代表数组中的每一个数。∣ai∣≤10^9
 *
 * 输出描述：
 * 连续子数组的最大之和。
 */

import java.util.Scanner;

/**
 * 连续子数组, 看见子数组就该想到 动态规划
 * dp[i] : 以 i 结尾的子数组的最大和
 * dp[i] = Math.max(x, x + dp[i - 1]);
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(n)
 */

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        // 这里的 dp 数组要使用 long 类型
        long[] dp = new long[n + 1];

        // 这里记录最大的和, 也同样要使用 long 类型
        long res = Long.MIN_VALUE;
        for (int i = 1; i <= n; i++) {
            int x = in.nextInt();

            // 状态转移方程
            dp[i] = Math.max(x, x + dp[i - 1]);

            // 更新最大值
            res = Math.max(res, dp[i]);
        }

        // 打印结果
        System.out.println(res);
    }
}